<html>
<head>
<title> Tcl Dot API (tcldot)</title>
<link rev=made href="mailto:ellson@graphviz.org">
</head>
<body>
<h1> Tcl Dot API (tcldot)</h1>
<p>(Tcl Dot also pulls in Gdtclft for writing to a gif image.)
<p><hr>
Create a new graph.
<pre>
        <b>dotnew</b> <i>graphtype</i> ?<i>attributeName attributeValue</i>? ?...?
          -> <i>graphHandle</i>

	<i>graphtype</i>:= (<b>graph</b>|<b>digraph</b>|<b>graphstrict</b>|<b>digraphstrict</b>)
</pre>
Read a graph.
<pre>
        <b>dotread</b> <i>fileHandle</i>
          -> <i>graphHandle</i>
</pre>
Add a node to a graph
<pre>
        <i>graphHandle</i> <b>addnode</b> ?<i>nodeName</i>? ?<i>attributeName attributeValue</i>? ?...?
          -> <i>nodeHandle</i>

	If the <i>nodeName</i> parameter is omitted the name of the
	node defaults to <i>nodeHandle</i>.
</pre>
Add an edge to a graph
<pre>
        <i>graphHandle</i> <b>addedge</b> <i>tailnode</i> <i>headnode</i> ?<i>attributeName attributeValue</i>? ?...?
          -> <i>edgeHandle</i>

        <i>tailnode</i> = (<i>tailnodeHandle</i>|<i>tailnodeName</i>)
        <i>headnode</i> = (<i>headnodeHandle</i>|<i>headnodeName</i>)

        NodeHandles take precedence, so if nodeName is of the form
        "node99" it may conflict.  The precedence can be overridden
        with code such as:
            <i>graphHandle</i> <b>addedge</b> <b>\</b>
                   <b>[</b><i>graphHandle</i> <b>findnode</b> <i>tailnodeName</i><b>]</b> <b>\</b>
                   <b>[</b><i>graphHandle</i> <b>findnode</b> <i>headnodeName</i><b>]</b> 
</pre>
Add a subgraph to a graph
<pre>
        <i>graphHandle</i> <b>addsubgraph</b> ?<i>subgName</i>? ?<i>attributeName attributeValue</i>? ?...?
          -> <i>subgHandle</i>

	If the <i>subgName</i> parameter is omitted the name of the
	node defaults to <i>subgHandle</i>.

	Clusters are created by giving a subgraph a name that begins
	with "cluster".
</pre>
Add a edge to a node
<pre>
        <i>tailnodeHandle</i> <b>addedge</b> <i>headnode</i> ?<i>attributeName attributeValue</i>? ?...?
          -> <i>edgeHandle</i>

        <i>headnode</i> = (<i>headnodeHandle</i>|<i>headnodeName</i>)
</pre>
Delete a graph/node/edge
<pre>
        <i>graphHandle</i> <b>delete</b>
        <i>nodeHandle</i> <b>delete</b>
        <i>edgeHandle</i> <b>delete</b>
</pre>
Count nodes/edges
<pre>
        <i>graphHandle</i> <b>countnodes</b>
	  -> <i>integer</i>
        <i>graphHandle</i> <b>countedges</b>
	  -> <i>integer</i>
</pre>
List subgraphs/nodes/edges
<pre>
        <i>graphHandle</i> <b>listnodes</b>
	  -> <i>{nodeHandle ... }</i>

        <i>nodeHandle</i> <b>listedges</b>
	  -> <i>{edgeHandle ... }</i>
        <i>nodeHandle</i> <b>listoutedges</b>
	  -> <i>{edgeHandle ... }</i>
        <i>nodeHandle</i> <b>listinedges</b>
	  -> <i>{edgeHandle ... }</i>

        <i>edgeHandle</i> <b>listnodes</b>
	  -> <i>tailnodeHandle</i> <i>headnodeHandle</i>

        <i>graphHandle</i> <b>listsubgraphs</b>
	  -> <i>{graphHandle ... }</i>
</pre>
Find nodes/edges by nodename
<pre>
        <i>graphHandle</i> <b>findnode</b> <i>nodename</i>
	  -> <i>nodeHandle</i>

        <i>graphHandle</i> <b>findedge</b> <i>tailnodename</i> <i>headnodename</i>
	  -> <i>edgeHandle</i>

        <i>nodeHandle</i> <b>findedge</b> <i>nodename</i>
	  -> <i>edgeHandle</i>
</pre>
Show graph/node/edge name
<pre>
        <i>graphHandle</i> <b>showname</b>
	  -> <i>graphname</i>

        <i>nodeHandle</i> <b>showname</b>
	  -> <i>nodename</i>

        <i>edgeHandle</i> <b>showname</b>
	  -> <i>edgename</i>
</pre>
Set default node/edge attributes
<pre>
        <i>graphHandle</i> <b>setnodeattributes</b> <i>attributeName attributeValue</i> ?...?
        <i>graphHandle</i> <b>setedgeattributes</b> <i>attributeName attributeValue</i> ?...?
</pre>
List node/edge attribute names
<pre>
        <i>graphHandle</i> <b>listnodeattributes</b>
	  -> <i>{attributeName ... }</i>
        <i>graphHandle</i> <b>listedgeattributes</b>
	  -> <i>{attributeName ... }</i>
</pre>
Query default node/edge attributes
<pre>
        <i>graphHandle</i> <b>querynodeattributes</b> <i>attributeName</i> ?...?
	  -> <i>{attributeValue ... }</i>
        <i>graphHandle</i> <b>queryedgeattributes</b> <i>attributeName</i> ?...?
	  -> <i>{attributeValue ... }</i>
</pre>
Set graph/node/edge attributes
<pre>
        <i>graphHandle</i> <b>setattributes</b> <I>attributeName attributeValue</i> ?...?
        <i>nodeHandle</i> <b>setattributes</b> <i>attributeName attributeValue</i> ?...?
        <i>edgeHandle</i> <b>setattributes</b> <i>attributeName attributeValue</i> ?...?
</pre>
List graph/node/edge attribute names
<pre>
        <i>graphHandle</i> <b>listattributes</b>
	  -> <i>{attributeName ... }</i>
        <i>nodeHandle</i> <b>listattributes</b>
	  -> <i>{attributeName ... }</i>
        <i>edgeHandle</i> <b>listattributes</b>
	  -> <i>{attributeName ... }</i>
</pre>
Query graph/node/edge attribute values
<pre>
        <i>graphHandle</i> <b>queryattributes</b> <i>attributeName</i> ?<i>attributeName</i>? ?...?
	  -> <i>{attributeValue ... }</i>
        <i>nodeHandle</i> <b>queryattributes</b> <i>attributeName</i> ?<i>attributeName</i>? ?...?
	  -> <i>{attributeValue ... }</i>
        <i>edgeHandle</i> <b>queryattributes</b> <i>attributeName</i> ?<i>attributeName</i>? ?...?
	  -> <i>{attributeValue ... }</i>
</pre>
Layout nodes
<pre>
        <i>graphHandle</i> <b>layoutNodes</b>

	<b>NOTE:</b> Not yet implemented.  Use:
	      <i>graphHandle</i> <b>layout</b>
        to layout both nodes and edges.
</pre>
Layout edges
<pre>
        <i>graphHandle</i> <b>layoutEdges</b> -<i>style</i>

	<i>style</i>:= (<b>straight</b>|<b>spline</b>)

	<b>NOTE:</b> Not yet implemented.  Use:
	      <i>graphHandle</i> <b>layout</b>
        to layout both nodes and edges.
</pre>
Write graph to file
<pre>
        <i>graphHandle</i> <b>write</b> <i>filehandle</i> <i>format</i>

	<i>format</i>:= (<b>ps</b>|<b>mif</b>|<b>gif</b>|<b>plain</b>|<b>dot</b>)
</pre>
Render graph to existing or new gifImage (see:
<a href=http://guraldi.hgp.med.umich.edu/gdtcl.html>gdTcl</a>)
<pre>
        <i>graphHandle</i> <b>rendergd</b> ?<i>gdHandle</i>?
          -> <i>gdHandle</i>
</pre>
Render graph to canvas (tkdot only)
<pre>
        <i>graphHandle</i> <b>render</b> <i>canvashandle</i>

	<b>NOTE:</b> Not yet fully implemented.  For now use:
	      <b>set c</b> <i>canvasHandle</i>
	      <b>eval [</b><i>graphHandle</i> <b>render]</b>
</pre>
</body>
</html>
